package ar.com.sectorwine.services;

import java.util.List;

import excepciones.ExcepcionGeneral;

import ar.com.sectorwine.entities.Empresa;
import ar.com.sectorwine.entities.Users;

/**
 * @author Ismael
 *
 */
public interface EmpresasService {
	
	
	/**
	 * crea una empresa y se la asigna al usuario correspondiente
	 * 
	 * @param Empresa empresa
	 * @param User user
	 */
	public void crearEmpresa(Empresa empresa, Users user) throws ExcepcionGeneral;
	
	
	/**
	 * Busca todas las empresas registradas
	 * 
	 * 				
	 * @return List<Empresa> (Lista de todas las empresas registradas)
	 */
	public List<Empresa> getEmpresas();
	
	
	/**
	 * Busca una empresa a partir de su identificador unico.
	 * 
	 * @param String id (Identificador unico de la empresa)
	 * 				
	 * @return Empresa
	 */
	public Empresa getEmpresa(String id);
	
	
	/**
	 * Guarda las modificaciones realizadas sobre una empresa.
	 * 
	 * @param empresa Empresa
	 **/
	public void modificarEmpresa(Empresa empresa) throws ExcepcionGeneral;
	
	
	/**
	 * Da de baja la empresa, seteandole el estado de baja, devuelve verdadero en el caso exitoso 
	 * y falso en el caso de que no sea posible la baja.
	 * 
	 * @param id String (Identificador unico de la empresa)
	 * 				
	 * @return boolean (En exito: true, En Fracazo: false)
	 */
	public boolean bajaEmpresa(String id);
	
	
	/**
	 * Busca empresas filtrando por razon social, devuelve una lista de empresas las cuales 
	 * tienen coincidencias en su atributo razonSocial
	 * 
	 * @param razonSocial String
	 * 				
	 * @return List<Empresa> (Lista de empresas)
	 */
	public List<Empresa> buscarEmpresa(String razonSocial);
	
	public void seguirEmpresa(Users usuario, Empresa empresa);
	
	public void dejarDeSeguirEmpresa(Users usuarioActual, Empresa empresa);

}
